package base

import (
	"fmt"
	"strings"
	"unicode/utf8"
)

func main()  {

	s := "Yes我爱中国!" // UTF-8编码

	// 输出的是 16 进制编码的总个数
	fmt.Println(len(s))

	// 遍历 16 进制编码
	for _, b := range []byte(s){
		fmt.Printf("%X ", b)
	}

	fmt.Println()

	// 遍历文字
	for i, ch := range s { // ch 就是 rune 类型
		fmt.Printf("(%d %X)",i ,ch)
	}

	fmt.Println()

	fmt.Println("s 字符总数：", utf8.RuneCountInString(s))

	/**
		输出每一个字符
			但是繁琐
	 */
	bytes := []byte(s)
	for len(bytes) > 0 {

		// 转换成 rune 类型
		ch, size := utf8.DecodeRune(bytes)
		bytes = bytes[size:]
		// 输出 字符
		fmt.Printf("%c ", ch)

	}

	fmt.Println()

	/**
		输出每一个字符
			推荐使用
	 */
	for i, ch := range []rune(s){
		fmt.Printf("(%d %c)", i, ch)
	}

	fmt.Println()

	// strings 操作包，有许多针对字符串的函数，推荐使用
	// 把英文转换为大写
 	s1 := strings.ToUpper(s)
 	fmt.Println(s1)

}
